package org.bee.service;

import jakarta.annotation.Resource;
import org.bee.enums.IsDelete;
import org.bee.string.StringUtils;
import org.springframework.stereotype.Service;

import org.bee.model.SysFile;
import org.bee.input.SysFileSearchVo;
import org.bee.mappers.SysFileMapper;
import org.bee.model.SysFileExample;

import java.util.List;

/**
 * @author 陈国松
 * @date 2025-02-28 15:03:00
 * @description 文件表Service层
 */
@Service
public class SysFileService{

    @Resource
    private SysFileMapper sysFileMapper;

    /**
     * 插入文件表
     * @param sysFile 文件表实体
     * @return 插入结果
     */
    public int insert(SysFile sysFile) {
        return sysFileMapper.insert(sysFile);
    }

    /**
     * 删除文件表
     * @param sysFileId 文件表id
     * @return 删除结果
     */
    public int delete(String sysFileId,Boolean isDelete) {
        if(isDelete){
            return sysFileMapper.deleteByPrimaryKey(sysFileId);
        }else{
            SysFile sysFile = new SysFile();
            sysFile.setId(sysFileId);
            sysFile.setIsDeleted(true);
            return sysFileMapper.updateByPrimaryKeySelective(sysFile);
        }
    }

    /**
     * 根据主键更新文件表
     * @param sysFile 文件表实体
     * @return 更新结果
     */
    public int update(SysFile sysFile) {
        return sysFileMapper.updateByPrimaryKeySelective(sysFile);
    }

    /**
    * 查询文件表
    * @param sysFileSearchVo 文件表查询参数
    * @return 文件表列表
    */
    public List<SysFile> select(SysFileSearchVo sysFileSearchVo,boolean isDeleted) {
        SysFileExample sysFileExample = new SysFileExample();
        SysFileExample.Criteria criteria = sysFileExample.createCriteria();
        if (StringUtils.isNotEmpty(sysFileSearchVo.getFileName())) {
                criteria.andFileNameLike("%"+sysFileSearchVo.getFileName()+"%");
        }
        if (null!=sysFileSearchVo.getFileType()) {
                criteria.andFileTypeEqualTo(sysFileSearchVo.getFileType());
        }
        if (StringUtils.isNotEmpty(sysFileSearchVo.getFileSuffix())) {
                criteria.andFileSuffixEqualTo(sysFileSearchVo.getFileSuffix());
        }
        criteria.andIsDeletedEqualTo(isDeleted);
        return sysFileMapper.selectByExample(sysFileExample);
    }

    /**
    * 根据主键查询文件表
    * @param id 文件表id
    * @return 文件表实体
    */
    public SysFile selectById(String id) {
        return sysFileMapper.selectByPrimaryKey(id);
    }

    /**
    * 根据文件名加hashCode查询文件表
    * @param fileName 文件名
    * @return 文件表实体
    */
    public SysFile selectByFileName(String fileName,String hashCode){
        SysFileExample sysFileExample = new SysFileExample();
        SysFileExample.Criteria criteria = sysFileExample.createCriteria();
        criteria.andFileNameEqualTo(fileName);
        criteria.andHashcodeEqualTo(hashCode);
        criteria.andIsDeletedEqualTo(IsDelete.FALSE.getCode());
        List<SysFile> sysFiles = sysFileMapper.selectByExample(sysFileExample);
        if(!sysFiles.isEmpty()){
            return sysFiles.getFirst();
        }
        return null;
    }

    /**
     * 清空回收站
     * @param
     */
    public void deleteAll() {
        SysFileExample sysFileExample = new SysFileExample();
        sysFileExample.createCriteria().andIsDeletedEqualTo(IsDelete.TRUE.getCode());
        sysFileMapper.deleteByExample(sysFileExample);
    }
}